#ifndef _ExcepcionSVG_h
#define _ExcepcionSVG_h
#include <iostream>
#include <exception>
using namespace std;

/** \file ExcepcionSVG.h
* \brief Definciones de clase
*
* Defincion de clase ExcepcionSVG.
* JAVIER ANTON DIAZ DNI:48629698Q
* STANISLAV LITVINENKO DNI:02062226T
*/

/** \brief Clase ExcepcionSVG.
 *
 * La clase excepcionsvg que en un principio seria padre de las siguientes excepciones pero no, vaya.
 */
class ExcepcionSVG{

	public:
		/** \brief what().
		*
		* Metodo virtual (supuestamente) que informa sobre el error producido en las clases heredarias.
		* \return El método devuelve un string con el error.
		*/
		virtual string what() const=0;

		/** \brief ~ExcepcionSVG().
		*
		* Metodo virtual (supuestamente) que destruye el objeto heredario.
		*/
		virtual ~ExcepcionSVG()=0;

	private:
};

/** \brief Clase ExcepcionCoordenadaErronea.
 *
 * La clase excepcioncoordenadaerronea manejara los errores relacionados con la coordenada, para que no salgan del lienzo.
 */
class ExcepcionCoordenadaErronea {
	
	public:
		/** \brief ExcepcionCoordenadaErronea(float,float).
		*
		* Constructor sobrecargado con parametros.
		* \param cx Variable float de coordenada X
		* \param cy Variable float de coordenada Y
		*/
		ExcepcionCoordenadaErronea(float cx, float cy);

		/** \brief ~ExcepcionCoordenadaErronea().
		*
		* Destructor por defecto.
		*/
		~ExcepcionCoordenadaErronea();

		/** \brief getX().
		*
		* Funcion informadora de la coordenada X.
		* \return Devuelve el valor de la coordenada X
		*/
		float getX() const;

		/** \brief getY().
		*
		* Funcion informadora de la coordenada Y.
		* \return Devuelve el valor de la coordenada Y
		*/
		float getY() const;

		/** \brief what().
		*
		* Funcion que devuelve el string con la descripcion del error.
		* \return Devuelve el string con el error
		*/
		string what() const;

	private:
		/** \brief Variable tipo float Coordenada X;
		 *
		 *	La variable que representa la Coordenada X.
		 */
		float x;

		/** \brief Variable tipo float Coordenada Y;
		 *
		 *	La variable que representa la Coordenada Y.
		 */
		float y;
};

/** \brief Clase ExcepcionFiguraDesconocida.
 *
 * La clase excepcionfiguradesconocida manejara los errores relacionados con el nombre de las figuras, para que sea una figura conocida.
 */
class ExcepcionFiguraDesconocida {

	public:
		/** \brief ExcepcionFiguraDesconocida(string).
		*
		* Constructor sobrecargado con parametro.
		* \param s Variable con la figura desconocida
		*/
		ExcepcionFiguraDesconocida(string);

		/** \brief ~ExcepcionFiguraDesconocida().
		*
		* Destructor por defecto.
		*/
		~ExcepcionFiguraDesconocida();

		/** \brief what().
		*
		* Funcion que devuelve el string con la descripcion del error.
		* \return Devuelve el string con el error
		*/
		string what() const;

		/** \brief getFiguraDesconocida().
		*
		* Funcion que devuelve el string con la descripcion del error.
		* \return Devuelve el string con el error
		*/
		string getFiguraDesconocida() const;
	private:
		/** \brief Variable tipo string queFigura;
		 *
		 *	La variable que contiene el nombre de la figura desconocida.
		 */
		string queFigura;
};

/** \brief Clase ExcepcionOperacionDesconocida.
 *
 * La clase excepcionoperaciondesconocida manejara los errores relacionados con las operaciones, para que sea una operacion conocida.
 */
class ExcepcionOperacionDesconocida {

	public:
		/** \brief ExcepcionOperacionDesconocida(string).
		*
		* Constructor sobrecargado con parametro.
		* \param op Variable con la operacion desconocida
		*/
		ExcepcionOperacionDesconocida(string);

		/** \brief ~ExcepcionOperacionDesconocida().
		*
		* Destructor por defecto.
		*/
		~ExcepcionOperacionDesconocida();

		/** \brief what().
		*
		* Funcion que devuelve el string con la descripcion del error.
		* \return Devuelve el string con el error
		*/
		string what() const;

		/** \brief getOperacionDesconocida().
		*
		* Funcion que devuelve el string con la descripcion del error.
		* \return Devuelve el string con el error
		*/
		string getOperacionDesconocida() const;
	private:
		/** \brief Variable tipo string queOperacion;
		 *
		 *	La variable que contiene el nombre de la operacion desconocida.
		 */
		string queOperacion;
};

/** \brief Clase ExcepcionValorNoValido.
 *
 * La clase excepcionvalornovalido manejara los errores relacionados con los valores en general.
 */
class ExcepcionValorNoValido{

	public:
		/** \brief ExcepcionValorNoValido(string).
		*
		* Constructor sobrecargado con parametro.
		* \param v El valor incorrecto
		* \param que Variable con la descripcion del error
		*/
		ExcepcionValorNoValido(int , string );

		/** \brief ~ExcepcionValorNoValido().
		*
		* Destructor por defecto.
		*/
		~ExcepcionValorNoValido();

		/** \brief what().
		*
		* Funcion que devuelve el string con la descripcion del error.
		* \return Devuelve el string con el error
		*/
		string what() const;

		/** \brief getValor().
		*
		* Funcion que devuelve el valor incorrecto
		* \return Devuelve el int con el valor
		*/
		int getValor() const;

		/** \brief getMotivo().
		*
		* Funcion que devuelve la descripcion del error
		* \return Devuelve el string con el error
		*/
		string getMotivo() const;
	private:
		/** \brief Variable tipo int valor;
		 *
		 *	La variable que contiene el valor incorrecto
		 */
		int valor;

		/** \brief Variable tipo string queOcurrio;
		 *
		 *	La variable que contiene la descripcion del error.
		 */
		string queOcurrio;
};

#endif
